﻿using System;

namespace LAPI.Business.Acciones
{
    /// <summary>
    /// Clase para realizar la acción: Cambiar el estado de un Centro Deportivo
    /// </summary>
    public class AccEstadoCentroDeportivo
    {
        /// <summary>
        /// Logger de la clase
        /// </summary>
        private LAPI.Core.Logging.ILogger logger;

        /// <summary>
        /// Constructor
        /// </summary>
        public AccEstadoCentroDeportivo()
        {
            logger = LAPI.Core.Logging.LoggerFactory.CreateLogger(type: typeof(AccEstadoCentroDeportivo));
        }

        /// <summary>
        /// Método para realizar la acción de activar un centro deportivo
        /// <p>
        /// El método realiza las siguientes funciones:
        /// <ul>
        /// <li>Activar un centro deportivo en la base de datos</li>  
        /// </ul>
        /// </p>
        /// </summary>
        /// <param name="datosCentroDeportivo">Modelo con los datos del centro deportivo</param>
        /// <returns>ResultadoAccion, con el resultado de la operación</returns>
        /// <seealso cref="CentroDeportivo"/>
        /// <seealso cref="ResultadoAccion"/>
        /// <seealso cref="GestorCentrosDeportivos"/>
        /// <seealso cref="TipoResultado"/>
        /// <seealso cref="TipoMensaje"/>
        public ResultadoAccion ActivarCentroDeportivo(LAPI.Data.Model.CentroDeportivo datosCentroDeportivo)
        {
            logger.Debug("[ActivarCentroDeportivo] Comienzo");
            logger.Debug("[ActivarCentroDeportivo] Datos:" + datosCentroDeportivo);

            ResultadoAccion res = new ResultadoAccion();

            try
            {
                Gestores.GestorCentrosDeportivos oGestor = new Gestores.GestorCentrosDeportivos();
                oGestor.ActualizarEstado(datosCentroDeportivo: datosCentroDeportivo);
                res.addMensaje(mensaje: "El centro deportivo ha sido activado.", tipoMensaje: TipoMensaje.OK);
                res.setResultado(TipoResultado.CORRECTO);
            }
            catch (Exception ex)
            {
                logger.Error(ex);
                res.addMensaje(mensaje: "No ha sido posible activar el centro deportivo.", tipoMensaje: TipoMensaje.ERROR);
                res.setResultado(TipoResultado.ERROR);
            }
            logger.Debug("[ActivarCentroDeportivo] Fin");
            return res;
        }


        /// <summary>
        /// Método para realizar la acción de desactivar un centro deportivo
        /// <p>
        /// El método realiza las siguientes funciones:
        /// <ul>
        /// <li>Desactivar un centro deportivo en la base de datos</li>  
        /// </ul>
        /// </p>
        /// </summary>
        /// <param name="datosCentroDeportivo">Modelo con los datos del centro deportivo</param>
        /// <returns>ResultadoAccion, con el resultado de la operación</returns>
        /// <seealso cref="CentroDeportivo"/>
        /// <seealso cref="ResultadoAccion"/>
        /// <seealso cref="GestorCentrosDeportivos"/>
        /// <seealso cref="TipoResultado"/>
        /// <seealso cref="TipoMensaje"/>
        public ResultadoAccion DesactivarCentroDeportivo(LAPI.Data.Model.CentroDeportivo datosCentroDeportivo)
        {
            logger.Debug("[DesactivarCentroDeportivo] Comienzo");
            logger.Debug("[DesactivarCentroDeportivo] Datos:" + datosCentroDeportivo);

            ResultadoAccion res = new ResultadoAccion();

            try
            {
                Gestores.GestorCentrosDeportivos oGestor = new Gestores.GestorCentrosDeportivos();
                oGestor.ActualizarEstado(datosCentroDeportivo: datosCentroDeportivo);
                res.addMensaje(mensaje: "El centro deportivo ha sido desactivado.", tipoMensaje: TipoMensaje.OK);
                res.setResultado(TipoResultado.CORRECTO);
            }
            catch (Exception ex)
            {
                logger.Error(ex);
                res.addMensaje(mensaje: "No ha sido posible desactivar el centro deportivo.", tipoMensaje: TipoMensaje.ERROR);
                res.setResultado(TipoResultado.ERROR);
            }
            logger.Debug("[DesactivarCentroDeportivo] Fin");
            return res;
        }
    }
}
